Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

819
Visualizações
Wordpress $wpdb->get_results devuelve una matriz vacía pero phpMyAdmin devuelve varias filas. ¿Por qué?

El código de mi complemento de WordPress se ve así:

 $table = $wpdb->prefix."cf_form_entry_values"; $where = "entry_id = ".$entryid; $select = "SELECT id FROM {$table} WHERE {$where}"; $query = $wpdb->prepare( $select ); $result = $wpdb->get_results( $query );

Produce la siguiente consulta mysql: SELECCIONE id DE wpqs_cf_form_entry_values DONDE entry_id = 49

WordPress devuelve una matriz vacía. No se informaron errores de SQL (tengo show_errors() configurado), var_dump está vacío. Pero si corto y pego esa consulta en phpMyAdmin, devuelve las filas esperadas. No entiendo por qué WordPress me da resultados vacíos. También probé SELECCIONAR * DESDE wpqs_cf_form_entry_values DONDE entry_id = 49

He notado que si elimino la cláusula WHERE, WordPress está feliz de devolverme la tabla completa, pero ¿por qué no puedo filtrarla con una cláusula WHERE?

MÁS INFORMACIÓN TRAS PRUEBAS ADICIONALES... Es curioso lo que funciona y lo que no.

Estas dos consultas no funcionan:

 SELECT * FROM wpqs_cf_form_entry_values WHERE entry_id = 55 AND slug = 'photo' SELECT * FROM wpqs_cf_form_entry_values WHERE entry_id = 55

Pero este lo hace:

 SELECT * FROM wpqs_cf_form_entry_values WHERE slug = 'photo'

He intentado poner el valor de entry_id entre comillas y sin ellas. ¿Esa información adicional ayuda a alguien?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

¿Podría intentar agregar este código?

 $wpdb->show_errors( true )

Tal vez luego muestre alguna información sobre por qué no funciona. ¿Intentó escribir sin variables de PHP, como una cadena completa?

También intente poner la tabla en qoutes

 SELECT * FROM `wpqs_cf_form_entry_values`

También he notado que falta entry_id en SELECT. Deberías tenerlo así:

 SELECT id,entry_id FROM `wpqs_cf_form_entry_values`

También intente poner en la parte superior del archivo

 global $wpdb
over 4 years ago · Santiago Trujillo Relatório

0

$where = "entry_id = ".$entryid; Supongo que $entryid debería estar envuelto en ''

over 4 years ago · Santiago Trujillo Relatório

0

La declaración de selección no se configura correctamente para el wpdb->prepare() .

$wpdb->prepare() necesita 2 argumentos. 1) la declaración de selección 2) los valores que son variables en la declaración.

  1. La declaración de selección debe crearse con "formato sprintf" de la siguiente manera:

Donde el valor es un dígito:

 "select * from table where id = %d";

Donde valor es una cadena:

 "select * from table where name = %s";

Donde el valor es un "flotante":

 "select * from table where id = %f";

Donde el valor es una mezcla (cualquier número o mezcla es posible):

 "select * from table where id = %d OR name = %s OR price = %f";

%d , %s , %f son los únicos 3 valores que deben ir en una instrucción de selección que se enviará a wpdb->prepare()

En su caso, ASUMIENDO que entry_id es un número entero, la declaración debe crearse de la siguiente manera:

 $table = $wpdb->prefix."cf_form_entry_values"; $where = "entry_id = %d"; $select = "SELECT id FROM $table WHERE $where";

El segundo parámetro es el valor o valores para reemplazar los "formatos sprintf". Estos deben estar en el orden en que aparecen en la declaración de selección. En su caso, el único valor es $entryid . Paso estos valores en una matriz, pero se pueden pasar individualmente. En su caso, pasaría la instrucción select y el $entryid de la siguiente manera:

 $prepared_statement = $wpdb->prepare( $select,[$entryid] ); $results = $wpdb->get_results($prepared_statement);

Tenga en cuenta que he cambiado su variable $result a $results ya que $wpdb->get_results() es para devolver varias filas. Si espera una sola fila, es mejor usar $wpdb->get_row() con su declaración preparada.

MÁS INFORMACIÓN:https://developer.wordpress.org/reference/classes/wpdb/prepare/

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda